package pe.gob.pj.sri.dao.imp;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Repository;

import pe.gob.pj.sri.bean.Cargo;
import pe.gob.pj.sri.bean.PersonaNatural;
import pe.gob.pj.sri.bean.Sistema;
import pe.gob.pj.sri.bean.Usuario;
import pe.gob.pj.sri.dao.UsuarioDao;
@Repository("UsuarioDaoImp")
public class UsuarioDaoImp extends JdbcDaoSupport implements UsuarioDao{

	public boolean registrarUsuario(Usuario u) {
		// TODO Auto-generated method stub
		return false;
	}

	public boolean actualizarUsuario(Usuario u) {
		// TODO Auto-generated method stub
		return false;
	}

	public boolean eliminarUsuario(Usuario u) {
		// TODO Auto-generated method stub
		return false;
	}

	public List<Usuario> listaAnalistaTexting() {
		StringBuilder consulta=new StringBuilder();
		System.out.println("entro Usuario dao");
		//car4 =analista testing
		consulta.append(" SELECT * FROM usuario WHERE  idcargo = "+"'"+"car4"+"'");
		
		List<Map<String,Object>> listaOpcion = (List<Map<String,Object>>)getJdbcTemplate().queryForList(consulta.toString());
		
		List<Usuario> lista=new ArrayList<Usuario>();
		Usuario usuarioLista=null;
		for(Map<String,Object>usuario:listaOpcion){
			System.out.println("sql correcto");
			usuarioLista=new Usuario();
			usuarioLista.setIdUsuario(usuario.get("idusuario").toString());
			System.out.print("retorna lista1");
			usuarioLista.setIdDepartamento(usuario.get("iddepartamento").toString());
			System.out.print("retorna lista2");
			usuarioLista.setIdCargo(usuario.get("idcargo").toString());
			System.out.print("retorna lista3");
			usuarioLista.setUsu_idUsusario(usuario.get("usu_idusuario").toString());
			System.out.print("retorna lista4");
			usuarioLista.setNombre(usuario.get("nombre").toString());
			System.out.print("retorna lista5");
			usuarioLista.setApellidoPaterno(usuario.get("apellidopaterno").toString());
			System.out.print("retorna lista6");
			usuarioLista.setApellidoMaterno(usuario.get("apellidomaterno").toString());
			System.out.print("retorna lista7");
			usuarioLista.setPassword(usuario.get("password").toString());
			System.out.print("retorna lista8");
			usuarioLista.setTelefonoFijo(usuario.get("telefonofijo").toString());
			System.out.print("retorna lista9");
			usuarioLista.setTelefonoCelular(usuario.get("telefonocelular").toString());
			System.out.print("retorna lista10");
			usuarioLista.setEspecialidad(usuario.get("especialidad").toString());
			System.out.print("retorna lista11");
			usuarioLista.setCorreoElectronico(usuario.get("correoelectronico").toString());
			System.out.print("retorna lista12");
			
			lista.add(usuarioLista);
		}
		System.out.print("retorna lista1");
		
		return lista;
	}

	public List<Usuario> listaAnalistaDesarrollador() {
		StringBuilder consulta=new StringBuilder();
		System.out.println("entro Usuario dao");
		//car3 =analista desarrollador
		consulta.append(" SELECT * FROM usuario WHERE  idcargo = "+"'"+"car3"+"'");
		
		List<Map<String,Object>> listaOpcion = (List<Map<String,Object>>)getJdbcTemplate().queryForList(consulta.toString());
		
		List<Usuario> lista=new ArrayList<Usuario>();
		Usuario usuarioLista=null;
		for(Map<String,Object>usuario:listaOpcion){
			System.out.println("sql correcto");
			usuarioLista=new Usuario();
			usuarioLista.setIdUsuario(usuario.get("idusuario").toString());
			System.out.print("retorna lista1");
			usuarioLista.setIdDepartamento(usuario.get("iddepartamento").toString());
			System.out.print("retorna lista2");
			usuarioLista.setIdCargo(usuario.get("idcargo").toString());
			System.out.print("retorna lista3");
			usuarioLista.setUsu_idUsusario(usuario.get("usu_idusuario").toString());
			System.out.print("retorna lista4");
			usuarioLista.setNombre(usuario.get("nombre").toString());
			System.out.print("retorna lista5");
			usuarioLista.setApellidoPaterno(usuario.get("apellidopaterno").toString());
			System.out.print("retorna lista6");
			usuarioLista.setApellidoMaterno(usuario.get("apellidomaterno").toString());
			System.out.print("retorna lista7");
			usuarioLista.setPassword(usuario.get("password").toString());
			System.out.print("retorna lista8");
			usuarioLista.setTelefonoFijo(usuario.get("telefonofijo").toString());
			System.out.print("retorna lista9");
			usuarioLista.setTelefonoCelular(usuario.get("telefonocelular").toString());
			System.out.print("retorna lista10");
			usuarioLista.setEspecialidad(usuario.get("especialidad").toString());
			System.out.print("retorna lista11");
			usuarioLista.setCorreoElectronico(usuario.get("correoelectronico").toString());
			System.out.print("retorna lista12");
			
			lista.add(usuarioLista);
		}
		System.out.print("retorna lista1");
		
		return lista;
	}

	public Usuario obtenerAdministrador() {
		// TODO Auto-generated method stub
		return null;
	}

	public Usuario obtenerUsuario(String id) {
		// TODO Auto-generated method stub
		return null;
	}

	public Usuario login(String id, String password) {
		// TODO Auto-generated method stub

		Usuario u=null;
		try{
		String query="SELECT * FROM usuario WHERE idusuario= "+"'"+id+"'"+" and "+"password= "+"'"+password+"'";
		
		Map<String, Object> objeto = (Map<String, Object>) getJdbcTemplate()
						.queryForMap(query);
		
		if(objeto !=null){
			System.out.println("3. El objeto no es nulo");
			u=new Usuario();
			System.out.print("nombre");
			u.setIdUsuario(objeto.get("idusuario").toString());
			u.setIdDepartamento(objeto.get("iddepartamento").toString());
			u.setIdCargo(objeto.get("idcargo").toString());
			u.setUsu_idUsusario(objeto.get("usu_idusuario").toString());
			u.setNombre(objeto.get("nombre").toString());
			u.setApellidoPaterno(objeto.get("apellidopaterno").toString());
			u.setApellidoMaterno(objeto.get("apellidomaterno").toString());
			u.setPassword(objeto.get("password").toString());
			u.setTelefonoFijo(objeto.get("telefonofijo").toString());
			u.setTelefonoCelular(objeto.get("telefonocelular").toString());
			u.setEspecialidad(objeto.get("especialidad").toString());
			u.setCorreoElectronico(objeto.get("correoelectronico").toString());	
		}
		
		}catch (EmptyResultDataAccessException e) {
			System.out.println("error: EmptyResultDataAccessException");
			
		}
		return u;
	}

	public Usuario obtenerCoordinadorTesting() {
		// TODO Auto-generated method stub
		return null;
	}

	public Usuario obtenerCoordinadorDesarrollo() {
		// TODO Auto-generated method stub
		return null;
	}

	public List<Usuario> listarAnalistas(String cargo) throws Exception{
		System.out.println("listar Analistas cuyo cargo es: "+cargo);
		List<Usuario> lista = new ArrayList<Usuario>();
		Usuario analista = null;
		
		StringBuilder consulta1 = new StringBuilder();
		consulta1.append("SELECT u.idusuario, u.nombre, u.apellidopaterno, u.apellidomaterno,");
		consulta1.append("u.especialidad,  u.telefonocelular, u.telefonofijo, 0 as carga");
		consulta1.append(" from usuario u left join ticket_usuario tu on u.idusuario = tu.idusuario");
		consulta1.append(" where idcargo = ? and tu.idticket is null");
		List<Map<String,Object>> listaOpcion1 = (List<Map<String,Object>>)getJdbcTemplate().queryForList(consulta1.toString(), cargo);
		
		for(Map<String, Object> persona : listaOpcion1){
			analista = new Usuario();
			analista.setIdUsuario(persona.get("idusuario").toString());
			analista.setNombre(persona.get("nombre").toString());
			analista.setApellidoPaterno(persona.get("apellidopaterno").toString());
			analista.setApellidoMaterno(persona.get("apellidomaterno").toString());
			analista.setEspecialidad(persona.get("especialidad").toString());
			analista.setTelefonoCelular(persona.get("telefonocelular").toString());
			analista.setTelefonoFijo(persona.get("telefonofijo").toString());
			analista.setCarga(persona.get("carga").toString());
			
			lista.add(analista);
		}
		
		StringBuilder consulta = new StringBuilder();
		consulta.append("SELECT u.idusuario, u.nombre, u.apellidopaterno, u.apellidomaterno,");
		consulta.append("u.especialidad,  u.telefonocelular, u.telefonofijo, count(*) as carga");
		consulta.append(" from usuario u inner join ticket_usuario tu on u.idusuario = tu.idusuario");
		consulta.append(" where idcargo = ?");
		consulta.append(" group by (u.idusuario)");
		consulta.append(" order by (carga)");
		
		List<Map<String,Object>> listaOpcion = (List<Map<String,Object>>)getJdbcTemplate().queryForList(consulta.toString(), cargo);

		
		for(Map<String, Object> persona : listaOpcion){
			analista = new Usuario();
			analista.setIdUsuario(persona.get("idusuario").toString());
			analista.setNombre(persona.get("nombre").toString());
			analista.setApellidoPaterno(persona.get("apellidopaterno").toString());
			analista.setApellidoMaterno(persona.get("apellidomaterno").toString());
			analista.setEspecialidad(persona.get("especialidad").toString());
			analista.setTelefonoCelular(persona.get("telefonocelular").toString());
			analista.setTelefonoFijo(persona.get("telefonofijo").toString());
			analista.setCarga(persona.get("carga").toString());
			
			lista.add(analista);
		}
		
		return lista;
	}
	
	
	
}
